package com.example.ecommercemarketing.handler.impl;

import com.example.ecommercemarketing.dto.MarketingElementsDTO;
import com.example.ecommercemarketing.dto.ProductDTO;
import com.example.ecommercemarketing.dto.UserDTO;
import com.example.ecommercemarketing.handler.MarketingElementsHandler;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import java.util.Arrays;
import java.util.List;
import java.util.Random;
import java.util.concurrent.TimeUnit;

/**
 * 新客爱买榜处理器（面向注册30天内的用户）
 * 榜单规则：新用户加购/购买最多的商品TOP100
 */
public class NewCustomerFavoritesHandler implements MarketingElementsHandler {

    // 从配置中心读取榜单商品ID（示例用硬编码）
    private static final List<String> NEW_CUSTOMER_FAVORITES = Arrays.asList(
            "1001", "1005", "1010" // 实际应从数据库或缓存获取
    );

    @Value("${marketing.newCustomerRank.url:/rank/new-customer}")
    private String rankPageUrl;

    @Override
    public MarketingElementsDTO handle(ProductDTO product, UserDTO user) {
        // 仅对新客生效（注册30天内）
        if (!isNewCustomer(user)) {
            return null;
        }

        // 检查商品是否在榜
        if (!NEW_CUSTOMER_FAVORITES.contains(String.valueOf(product.getId()))) {
            return null;
        }

        //这里直接写死了一些测试数据，实际项目中是通过发其它应用的接口、查数据库、经过一些繁琐的业务逻辑处理来获取数据的
        MarketingElementsDTO elements = new MarketingElementsDTO();
        elements.setRecommendText(String.format("【新客最爱】%s，新手专享福利！", product.getName()));
        elements.setProductHighlights("同类新用户购买率TOP10");
        elements.setMarketingImageUrl("https://cdn.example.com/ranks/new-customer/" + product.getId() + ".jpg");
        elements.setExtraInfo(String.format("<a href='%s' target='_blank'>查看新客榜></a>", rankPageUrl));
        elements.setSource("new_customer_rank");


        Random random = new Random();
        int randomTime = random.nextInt(15);
        //模拟实际业务中的耗时
        try {
            TimeUnit.MILLISECONDS.sleep(randomTime);
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
        }

        return elements;
    }

    private boolean isNewCustomer(UserDTO user) {
        // 实际业务中应从用户服务获取注册时间
        return user.getUserId() != null
                && user.getUserId() % 3 == 0; // 模拟30%用户是新客
    }
}